﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AgileSaude.Entities;
using AgileSaude.Data;
using AgileSaude.Data.Repository;
using FBS.Framework;
using AgileSaude.Business.Validation;

namespace AgileSaude.Business.Process
{
    internal class Pedido_ServicosProcess
    {
        internal Resultado Incluir(Pedido_ServicosEntities pObj)
        {
            Resultado resultado = new Resultado();

            try
            {
                resultado.Sucesso = true;

                if (resultado.Sucesso)
                {
                    pedido_servicos obj = new pedido_servicos();
                    Util.CopyPropertyValues(pObj, obj);

                    new pedido_servicosRepository().Add(obj);
                }
            }
            catch (Exception ex)
            {
                String mensagem = ex.Message;
                new ResultadoProcess().GravarLog(ref resultado, mensagem, "AgileSaude", "", "Incluir", "Pedido_ServicosProcess");
                resultado.Sucesso = false;
                throw ex;
            }

            return resultado;
        }

        internal Resultado Alterar(Pedido_ServicosEntities pObj)
        {
            Resultado resultado = new Resultado();
            pedido_servicosRepository pedido_servicosRepository = new pedido_servicosRepository();

            try
            {
                pedido_servicos user = pedido_servicosRepository.getpedido_servicos(pObj.idPedido_servicos);
                Util.CopyPropertyValues(pObj, user);

                pedido_servicosRepository.Update();
                resultado.Sucesso = true;
            }
            catch (Exception ex)
            {
                Util.GravarLog(ex.Message, "AgileSaude");
                resultado.Sucesso = false;
                throw ex;
            }

            return resultado;
        }

        internal Pedido_ServicosEntities GetPedido_Servicos(int pIdPedido_Servicos)
        {
            pedido_servicos oData = new pedido_servicosRepository().getpedido_servicos(pIdPedido_Servicos);

            if (oData == null)
            {
                return new Pedido_ServicosEntities();
            }
            else
            {
                return GetPedido_Servicos(oData);
            }

        }

        internal Pedido_ServicosEntities GetPedido_Servicos(int pIdPedido, int pItem)
        {
            pedido_servicos oData = new pedido_servicosRepository().getpedido_servicos(pIdPedido, pItem);

            if (oData != null)
            {
                return GetPedido_Servicos(oData);
            }
            else
            {
                return null;
            }

        }

        private static Pedido_ServicosEntities GetPedido_Servicos(pedido_servicos oData)
        {
            Pedido_ServicosEntities oEntitie = new Pedido_ServicosEntities();

            Util.CopyPropertyValues(oData, oEntitie);
            oEntitie.Servico = new ServicoProcess().GetServico(oData.idServico);
            

            return oEntitie;
        }

        internal List<Pedido_ServicosEntities> Listar(Pedido_ServicosEntities pFiltro, ref Resultado resultado)
        {
            List<Pedido_ServicosEntities> lista = new List<Pedido_ServicosEntities>();

            if (pFiltro == null)
            {
                pFiltro = new Pedido_ServicosEntities();
            }

            try
            {
                var pedido_servicos = from u in new pedido_servicosRepository().GetAll()
                                      where (pFiltro.idPedido == 0 || u.idPedido == pFiltro.idPedido) &&
                                            (pFiltro.idServico == 0 || u.idServico == pFiltro.idServico) &&
                                            (pFiltro.Item == 0 || u.Item == pFiltro.Item) &&
                                            (pFiltro.idPedido_servicos == 0 || u.idPedido_servicos == pFiltro.idPedido_servicos)
                                      select u;

                foreach (pedido_servicos user in pedido_servicos)
                {
                    lista.Add(GetPedido_Servicos(user));
                }

                resultado.Sucesso = true;
            }
            catch (Exception ex)
            {
                String mensagem = ex.Message;
                new ResultadoProcess().GravarLog(ref resultado, mensagem, "AgileSaude", "", "Listar", "Pedido_ServicosProcess");
                resultado.Sucesso = false;
            }

            return lista;
        }

        internal List<Pedido_ServicosEntities> Listar(int pIdPedido, ref Resultado resultado)
        {
            List<Pedido_ServicosEntities> lista = new List<Pedido_ServicosEntities>();

            try
            {
                var pedido_servicos = new pedido_servicosRepository().GetAll(pIdPedido);
                
                foreach (pedido_servicos user in pedido_servicos)
                {
                    lista.Add(GetPedido_Servicos(user));
                }

                resultado.Sucesso = true;
            }
            catch (Exception ex)
            {
                String mensagem = ex.Message;
                new ResultadoProcess().GravarLog(ref resultado, mensagem, "AgileSaude", "", "Listar", "Pedido_ServicosProcess");
                resultado.Sucesso = false;
            }

            return lista;
        }
    }
}
